import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

    //士兵训练

    static class Soldier {
        // p 为价格，c 是次数
        int p;
        int c;
        public Soldier(int p, int c) {
            this.p = p;
            this.c = c;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//士兵的数量
        long S = scanner.nextLong();//一次组团需要的钱
        Soldier[] soldiers = new Soldier[n + 1]; // 索引0不使用

        for (int i = 1; i <= n; i++) {
            //第 i 个士兵需要的次数以及一次训练费用
            int p = scanner.nextInt();
            int c = scanner.nextInt();
            soldiers[i] = new Soldier(p, c);
        }

        // 按c降序排序士兵数组（从大到小）
        Arrays.sort(soldiers, 1, n + 1, new Comparator<Soldier>() {
            @Override
            public int compare(Soldier a, Soldier b) {
                return Integer.compare(b.c, a.c);
            }
        });

        long tmp = 0;
        int pos = 0;
        // 找到最后一个累加p总和小于S的位置
        for (int i = 1; i <= n; i++) {
            tmp += soldiers[i].p;
            if (tmp < S) {
                // pos 记录临界值
                pos = i;
            }
        }

        // Bt 是需要组团训练的次数
        int Bt = 0;
        if (pos < n) {
            Bt = soldiers[pos + 1].c; // 批量训练次数取下一个士兵的 c 值
        }

        long ans = Bt * S;
        // 计算前pos个士兵的额外训练成本
        for (int i = 1; i <= pos; i++) {
            ans += (long) soldiers[i].p * (soldiers[i].c - Bt);
        }

        System.out.println(ans);
    }
}
